package com.example.springboot.service;

import cn.hutool.core.util.ObjectUtil;
import com.example.springboot.common.ResultCode;
import com.example.springboot.common.config.JwtTokenUtils;
import com.example.springboot.dao.AdminDao;
import com.example.springboot.dao. UserDao;
import com.example.springboot.entity.Account;
import com.example.springboot.entity.Admin;
import com.example.springboot.entity. User;
import com.example.springboot.exception.CustomException;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import jakarta.annotation.Resource;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.stereotype.Service;

import java.util.List;

@Service

public class UserService {
    @Resource
    private UserDao userDao;

    public List< User> GetAll(){
        return userDao.selectAll();
    }

    public User userRegister(User user){
//1.拿到用户名，和数据库对比 看看是否冲突 ，冲突抛出异常
    String userName = user.getUserName();//用户输入de用户名

    User dbUser = userDao.findByName(userName);//根据用户名查询出来的对象，可能有可能是空
//判断有没有找到  一样的用户名
    if(ObjectUtil.isNotEmpty(dbUser)){
        throw new CustomException(ResultCode.USER_EXIST_ERROR);
    }

    //     2.校验用户名的唯一性：

    if (ObjectUtil.isNotEmpty(dbUser)) {
        throw new CustomException(ResultCode.USER_EXIST_ERROR);
    }
    //头像  默认
    if (ObjectUtil.isEmpty(user.getAvatar())) {
        user.setAvatar("http://localhost:9090/files/default.jpg");
    }
    //she设置 默认密码
    if (ObjectUtil.isEmpty(user.getPassword())){
        user.setPassword("123456");
    }

    userDao.insertSelective(user);
    return user;
}
    public User userLogin(User user) {

//        1.拿到用户传来的用户名，先到数据库查看这个用户名是否存在,如果不存在抛出异常：“用户不存在”
        User dbUser = userDao.findByName(user.getUserName());
        if (ObjectUtil.isEmpty(dbUser)){
            throw new CustomException(ResultCode.USER_ACCOUNT_ERROR);
        }
//        2.如果用户存在，则那用户输入的密码跟数据库找到的用户的密码比对，密码输入正确，允许登录
        String password = user.getPassword(); //用户输入的密码
        String dbPassword = dbUser.getPassword(); // 数据库找到用户的密码

        if (!password.equalsIgnoreCase(dbPassword)){
            throw new CustomException(ResultCode.USER_ACCOUNT_ERROR);
        }

        return dbUser;
    }

    public User findById(Integer id) {
        return userDao.findById(id);
    }

    public void delete(Integer id) {
        userDao.deleteByPrimaryKey(id);
    }


    public PageInfo<User> findPage(User search, Integer pageNum, Integer pageSize) {
        Account user = JwtTokenUtils.getCurrentUser();
        if (ObjectUtil.isEmpty(user)) {
            throw new CustomException(ResultCode.USER_NOT_LOGIN);
        }
        PageHelper.startPage(pageNum, pageSize);
        List<User> all = findByCondition(search);

        return PageInfo.of(all);
    }



    public List<User> findByCondition(User search) {
        return userDao.findBySearch(search);
    }
    public User userEdit(User user) {

        String userName = user.getUserName();
//     1.先校验用户名是不是为空： 如果用户名，为空，抛出异常
        if (ObjectUtil.isEmpty(userName)){
            throw new CustomException(ResultCode.USERNAME_ISNULL);
        }
        userDao.updateByPrimaryKeySelective(user);

        return user;
    }
    @Resource
    AdminDao adminDao;
    public User userRole(User user) {
//        1.执行删除操作:在用户表里删除这个管理员
        Integer id = user.getId(); //拿到管理员的Id
        delete(id);

//        2.把这个用户的信息新增到管理员表
        Admin admin = new Admin();
        admin.setAvatar(user.getAvatar());
        admin.setPassword(user.getPassword());
        admin.setRole(1);
        admin.setUserName(user.getUserName());
        admin.setAge(user.getAge());
        admin.setGender(user.getGender());
        admin.setPhone(user.getPhone());

        adminDao.insertSelective(admin);

        return user;
    }

}